/**
 * 对uni对象方法的二次封装，项目初始化后会挂载到全局$APP上，可全局使用
 */
import * as Util from './index';
import updateCustomBar from './updateCustomBar.js';
import {
	tabBarPages
} from '../plugins/app.ext.js';

/**
 * 显示成功提示框
 */
export const showSuccess = (msg, callback) => {
	uni.showToast({
		title: msg,
		icon: 'success',
		mask: true,
		duration: 1500,
		success() {
			callback && callback();
		}
	});
};
/**
 * 显示失败提示框
 */
export const showError = (msg, callback) => {
	uni.showModal({
		title: '友情提示',
		content: msg,
		showCancel: false,
		success(res) {
			callback && callback();
		}
	});
};
/**
 * 显示纯文字提示框
 */
export const showToast = msg => {
	uni.showToast({
		title: msg,
		icon: 'none'
	});
};
/**
 * 显示确认提示框
 */
export const showConfirm = (content, confirm = () => {}, cancel = () => {}) => {
	uni.showModal({
		title: '提示',
		content: content,
		icon: 'none',
		success: res => {
			if (res.confirm) {
				confirm && confirm();
			} else {
				cancel && cancel();
			}
		}
	});
};
/**
 * tabBar页面路径列表（用于链接跳转时判断）
 * tabBarLinks为常量，无需修改
 */
export const getTabBarLinks = () => {
	const tabBarLinks = [...tabBarPages];
	return tabBarLinks;
};
/**
 * 跳转到指定页面url，支持tabBar页面
 * @param {string}  url
 * @param {object}  query
 */
export const navTo = (url, query = {}) => {
	if (!url || url.length == 0) {
		return false;
	}
	// tabBar页面, 使用switchTab
	if (Util.inArray(url, getTabBarLinks())) {
		uni.switchTab({
			url: `/${url}`
		});
		return true;
	}
	// 生成query参数
	const queryStr = !Util.isEmpty(query) ? '?' + Util.urlEncode(query) : '';
	// 普通页面, 使用navigateTo
	uni.navigateTo({
		url: `/${url}${queryStr}`
	});
	return true;
};
/**
 * 重定向到指定页面url，支持tabBar页面
 * @param {string}  url
 * @param {object}  query
 */
export const redirectTo = (url, query = {}) => {
	if (!url || url.length == 0) {
		return false;
	}
	// tabBar页面, 使用switchTab
	if (Util.inArray(url, getTabBarLinks())) {
		uni.switchTab({
			url: `/${url}`
		});
		return true;
	}
	// 生成query参数
	const queryStr = !Util.isEmpty(query) ? '?' + Util.urlEncode(query) : '';
	// 普通页面, 使用navigateTo
	uni.redirectTo({
		url: `/${url}${queryStr}`
	});
	return true;
};
/**
 * 回退
 */
export const backPage = () => {
	//所有的页面，只有一个页面
	let pages = getCurrentPages();
	if (pages.length === 1) {
		redirectTo(getTabBarLinks[0]);
	}
	//有其他的页面
	else {
		uni.navigateBack({
			delta: 1
		});
	}
}
/**
 * 重新加载当前的页面
 */
export const reload = (query = {}, timeout) => {
	let page = getCurrentPage();
	let param = Object.assign({}, page.param, query);
	if (timeout) {
		setTimeout(() => {
			redirectTo(page.route, param);
		}, timeout);
	} else {
		redirectTo(page.route, param);
	}
};
/**
 * 获得确定元素的信息
 */
export const getDomBoundingClientRect = (selector, vm) => {
	return new Promise((resolve) => {
		let el = uni.createSelectorQuery().in(vm).select(selector);
		el.boundingClientRect(function(rect) {
			resolve(rect);
		}).exec();
	});
};
/**
 * 获得当前的页面
 */
export const getCurrentPage = () => {
	let pages = getCurrentPages();
	let page = pages[pages.length - 1];
	let param = page.options || page.$route.query;
	return {
		route: page.route,
		param: param
	};
};
/**
 * 获取当前的地理位置、速度
 */
export const location = () => {
	return new Promise((resolve) => {
		uni.getLocation({
			type: 'wgs84',
			success: function(res) {
				resolve(res);
			},
			fail: function() {
				resolve();
			}
		});
	});
};
/**
 * 得到距离顶部的高度
 */

export const getTabTop = (tabClassName, CustomBar) => {
	return new Promise((resolve) => {
		const query = uni.createSelectorQuery().in(this);
		query.select(tabClassName).boundingClientRect(data => {
			const top = CustomBar + data.height;
			resolve(top);
		}).exec();
	});
}
/**
 *  定位到登录页面
 */
export const toLogin = () => {
	uni.redirectTo({
		url: '/xj_user/login/index'
	});
};
/** 
 * 默认导出
 */
export default {
	success: showSuccess,
	error: showError,
	toast: showToast,
	confirm: showConfirm,
	navTo,
	redirectTo,
	reload,
	getDomBoundingClientRect,
	getCurrentPage,
	location,
	getTabTop,
	toLogin,
	backPage,
	updateCustomBar
};